package com.wksc.framework.impexp.writer;

import java.io.File;
import java.io.IOException;
import java.util.List;

import jxl.read.biff.BiffException;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**
 * <p> Title(文件名): ${file_name} </p>
 * <p> Description(描述): ${todo} </p>
 * <p> Copyright(版权): Copyright (c) ${year} </p>
 * <p> Company(公司): 成都四方信息技术有限公司 </p>
 * <p> CreateTime(生成日期)：11-11-3下午2:55 </p>
 *
 * @author wanglei
 * @version ${project_name}
 */
public abstract class Writer {
    protected  File file;
    protected boolean createFile;
    
    /**
     * 方法描述：初始化writer实例
     *
     * @creator wanglei
     * @param file 待写入的文件
     * @param createFile 是否创建新文件
     * @throws java.io.IOException
     * @throws BiffException
     */
    public abstract void initWriter(File file, boolean createFile) throws IOException, BiffException;

    /**
     *  按行的方式在指定行写入全部数据
     * @param data  待写入的数据
     * @param rowNum  行号
     * @return  成功数量
     * @throws jxl.write.WriteException
     */
    public abstract boolean writeByRow(Object[] data, int rowNum) throws WriteException, IOException;

    /**
     *  按行的方式有选择性的在指定行写入数据
     *
     * @param data  待写入的数据
     * @param rowNum  行号
     * @param rowIndex 哪些列写入
     * @return  成功数量
     */
    public abstract boolean writeByRow(Object[] data, int rowNum, Integer[] rowIndex) throws WriteException;

    /**
     * 批量写入数据,不判断顺序依次写入
     * @param data   待写入的数据
     * @param startLine 从第几行开始写
     * @return 成功写入条数
     * @throws WriteException 
     * @throws RowsExceededException 
     * @throws java.io.IOException
     */
    public abstract int writeByRows(List<?> data, int startLine) throws RowsExceededException, WriteException, IOException;

    /**
     * 批量写入数据,根据顺序写入
     * @param data  待写入的数据
     * @param startLine   从第几行开始写
     * @param rowIndex 哪些列写入
     * @return   成功写入条数
     */
    public abstract int writeByRows(List<?> data, int startLine, Integer[] rowIndex) throws WriteException;

    /**
     * 按列的方式写入数据
     * @param colNum  写入数据的列号
     * @param data 待写入的数据
     * @return 成功写入的条数
     * @throws WriteException
     * @throws java.io.IOException
     */
    public abstract int writeByCol(int colNum, List<String> data) throws WriteException, IOException;

    /**
     * writer最后的关闭方法,若子类在文件结束时有需要必须处理的操作
     * 在这个方法中写
     */
    public abstract void close() throws IOException, WriteException;

}
